本文仅供研究和测试,请勿将其用于任何收费或违法活动,后果自负。
原理
在未进行校园网认证的情况下,通常不会屏蔽 DNS 查询(53 端口)。因此,可通过在 53 端口运行 Hysteria 2
或基于 UDP 的 mKCP
等来建立通信。
准备工作
需要一台远程服务器,不建议使用国外服务器。
所需条件
- 未认证时不封锁 53 端口的校园网
- 一台远程服务器(Linux 或 Windows 均可,这里以 Linux 为例,建议使用国内服务器。)
- 支持
Hysteria 2
或其他底层传输协议为UDP
协议的客户端,比如:
验证 53 端口是否开放
在未进行校园网认证时,打开命令提示符(CMD)并执行:
1 | nslookup www.baidu.com 223.5.5.5 |
如果返回的服务器字段显示为 unknown
,则表示 53 端口可能被封锁,本方法可能不适用。
可用示例:

不可用示例(内网 53 端口开放,但访问外网 53 端口被封锁):


(不可用
配图为深圳大学校园网,使用 drcom 认证)
为什么建议使用国内服务器?
UDP 协议本身具有明显的流量特征,且 mKCP 的加密方式容易被识别,可能导致服务器 IP 被封禁。
优点:
- 国内服务器的延迟更低,尤其是校园网环境。
- 可以使用国内的 app ,不会被反向墙封锁,
但部分网购网站会封锁数据中心 IP。 - 国内服务器的流量特征更容易伪装成 DNS 流量。
- 如果使用国外服务器,可能会被GWF的深度包检测(DPI)识别并封锁。
- 实测教育网会对大量 UDP 流量封端口。(53端口未测试)
缺点:
- 国内服务器的流量更贵。
解决 systemd-resolved 占用 53 端口
如果 53 端口被 systemd-resolved
占用,可以尝试以下方法解决:
方法一:使用 iptables 转发(推荐)
- 安装
iptables-persistent
:
1 | sudo apt install iptables-persistent |
安装过程中选择 YES
并回车。
- 添加 NAT 规则:
1 | iptables -t nat -A PREROUTING -p udp --dport 53 -j DNAT --to-destination :5353 |
- 保存
iptables
规则:
1 | netfilter-persistent save |
- 将后续教程中的 53 端口改为 5353。
方法二:禁用 systemd-resolved
- 停止
systemd-resolved
服务:
1 | sudo systemctl stop systemd-resolved |
- 编辑
/etc/systemd/resolved.conf
文件:
1 | sudo nano /etc/systemd/resolved.conf |
修改内容如下:
1 | [Resolve] |
- 创建符号链接:
1 | ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf |
搭建教程
协议介绍
考虑到要伪装成跑在 53 端口的 DNS 流量,所以需要使用底层协议为 UDP 的代理协议。
常见基于 UDP 传输协议:
- Hysteria
- Hysteria 2
- TUIC
- WireGuard
- KCP
- mKCP
- QUIC
- XHTTP
对比
以下对比仅针对伪装成 53 端口 DNS 流量的情况。
协议 | 优点 | 缺点 | 客户端支持 |
---|---|---|---|
共同特性 | 基于 UDP 传输 适合绕过 TCP 封锁 |
UDP 流量可能被 QoS 限制 在严格过滤环境中可能被识别封锁 |
- |
mKCP | 可将流量伪装成 DNS 请求 底层传输协议,可与其他协议配合 |
仅 v2ray 和 xray 支持 仅 xray 支持流量伪装成 DNS 请求 确认包重传机制消耗更多流量 |
Windows: v2rayN (7.10.3+) Android: v2rayNG (1.9.40+),Neko-ray,Xray |
Hysteria 2 | 支持 0-RTT UDP 会话建立,减少延迟 采用 Brutal 拥塞控制算法 |
xray 不支持 将流量伪装为 HTTP/3,无法伪装成 DNS 流量 |
几乎所有主流代理客户端 |
TUIC | 支持 0-RTT UDP 会话建立 轻量化设计,资源占用低 基于 QUIC 协议 |
无法伪装成 DNS 流量 对恶劣网络环境优化不足 生态支持较新(2023年7月停更,2025年2月恢复更新) |
支持 sing-box 和 tuic 核心的客户端 |
WireGuard | 内置 TLS 1.3 加密 多路复用减少连接开销 对丢包和高延迟网络优化良好 |
无法伪装成 DNS 流量 实现复杂 |
几乎所有主流代理客户端 |
XHTTP | 支持上下行分离 可伪装为 HTTP/3 或 HTTP/2 支持多个 UDP 流量的聚合传输 |
无法伪装成 DNS 流量 配置复杂 仅 Xray 支持 |
Windows: v2rayN Android: v2rayNG |
考虑到校园网不太可能搭载深度包检测,所以现阶段优先推荐 Hysteria 2
,其次推荐 mKCP
。
方法一:Hysteria 2
搭建 Hysteria 2 服务器
远程服务器上安装 Hysteria 2
参考官方文档:
1 | bash <(curl -fsSL https://get.hy2.sh/) |
如果服务器在国内,下载可能缓慢。可手动上传 Hysteria 可执行文件到服务器,然后执行:
1 bash <(curl -fsSL https://get.hy2.sh/) --local /path/to/hysteria-linux-amd64
安装完成后,设置开机自启:
1 | sudo systemctl enable hysteria-server.service |
生成自签证书
将伪装域名设置为 dns.alidns.com
,可根据需要更改(需要 root 权限):
1 | openssl req -x509 -nodes -newkey ec:<(openssl ecparam -name prime256v1) -keyout /etc/hysteria/server.key -out /etc/hysteria/server.crt -subj "/CN=dns.alidns.com" -addext "subjectAltName=DNS:dns.alidns.com" -days 36500 && chown hysteria /etc/hysteria/server.key && chown hysteria /etc/hysteria/server.crt |
编辑 config.yaml 并设置端口与密码
1 | sudo nano /etc/hysteria/config.yaml |
1 | listen: :53 |
启动 Hysteria 2
1 | sudo systemctl restart hysteria-server.service |
检查 Hysteria 2 运行状态
1 | sudo systemctl status hysteria-server.service |
出现 active (running) 即表示成功,否则检查端口占用、证书、防火墙等。还需在云服务器管理平台放行 53 端口。
连接到 Hysteria 2
客户端中:
- 地址:服务器域名或 IP
- 端口:53
- 密码:设置的密码
- 传输层安全(TLS):tls
- SNI:dns.alidns.com
- 跳过证书验证(建议配置自签证书的 pinSHA256 或 证书)
关闭分应用代理并切换到全局规则,建议搭配tun模式。
方法二:mKCP
这里使用 Xray-core 举例,也可以使用 v2fly-v5 或 sing-box(不支持mKCP传输协议,可尝试quic) 等。
也可以使用:
- Vless + tls + mKCP
- Trojan + tls + mKCP
搭建 VLESS 服务器
安装 Xray-core
参考官方文档。
编辑配置文件
默认路径为 /usr/local/etc/xray/config.json,可参考示例修改。
入站示例:
1 | { |
启动 Xray-core
1 | sudo systemctl restart xray |
检查 Xray-core 运行状态
1 | sudo systemctl status xray |
同样需要放行 53 端口并检查防火墙。
连接到 Xray-core
v2rayN V7.10.3及以后版本支持 dns 伪装。#6852
v2rayNG V1.9.40及以后版本支持 dns 伪装。#4368
客户端中:
- 地址:服务器域名或 IP
- 端口:53
- UUID:配置文件中的 uuid
- 加密方式、传输层安全:none
- 传输协议:kcp
- 伪装类型:dns
- 伪装域名:dns.alidns.com
关闭分应用代理并切换到全局规则,建议搭配tun模式。
使用方法
如果相关配置正确,连接后即可在未认证的校园网环境中正常访问外网。